import dotenv
import numpy as np

from langchain_openai import OpenAIEmbeddings
dotenv.load_dotenv()


# 1 、创建文本嵌入模型
embeddings = OpenAIEmbeddings(model = "text-embedding-3-small")

# 2、嵌入文本
query_vector = embeddings.embed_query("你好， 我叫博小睿， 请问你叫什么？")

# 将文本 转换成 向量
print(query_vector)
print(f"len = {len(query_vector)}")


# 相似度计算函数
def cosine_similarity(vector1:list, vector2:list)->float:
    # 1、计算两个向量的点积
    dot_product = np.dot(vector1, vector2)
    #2、计算两个向量之间的长度
    vector1_norm = np.linalg.norm(vector1)
    vector2_norm = np.linalg.norm(vector2)
    #3、计算余弦相似度
    return dot_product / (vector1_norm * vector2_norm)


# 文本之间的相似度计算
# 3、嵌入文本列表
document_vector = embeddings.embed_documents([
    "我叫博小睿， 喜欢打篮球",
    "这个喜欢打篮球的人叫， 博小睿",
    "乔不似说过，求知若渴、虚心若愚"
])
print("向量1 -------> 向量2的相似度", cosine_similarity(document_vector[0], document_vector[1]))
print("向量1 -------> 向量3的相似度", cosine_similarity(document_vector[0], document_vector[2]))
print("向量2 -------> 向量3的相似度", cosine_similarity(document_vector[1], document_vector[2]))

